import media from '@ohos.multimedia.media';
import http from '@ohos.net.http';
import prompt from '@system.prompt';

var detectIntervalID = null;
// setInterval() 方法：在固定的时间间隔内重复调用一个函数或代码片段，在每次调用之间具有固定的时间间隔，
// 它返回一个interval ID，该 ID 唯一地标识时间间隔。变量detectIntervalID表示interval ID
// 检测过程的interval ID

export default {
    data: {
        counter: 5,  // 倒计时计数
        percentage:'100',  // 百分比
        progress: 10,

        // 1.手指捏合
        vals11:"-",
        vals12:"-",
        vals13:"-",
        // 2.手指伸展
        vals21:"-",
        vals22:"-",
        vals23:"-",
        vals24:"-",
        vals25:"-",
        vals26:"-",
        // 3.手部震颤
        vals31:"-",
        vals32:"-",
        vals33:"-",
        // 4.手臂弯曲
        vals41:"-",
        vals42:"-",
        nowDate:"",
        num: 3,
        //        time:"2022-04-22 10:56:08",
        startText:"开始检测",
        return_result: {
        },

        visible: false,  // 控制刷新的组件的显示

        //      时间参数
        last_update:'',
        nowtime:'',
        year:'',
        month:'',
        date:'',
        hour:'',
        minute:'',
        secondss:''
    },

    //获取当前时间方法
    get_time(){
        //定义Date类的对象now
        var now = new Date();
        //        获取当前年
        this.year = now.getFullYear().toString()
        //        获取当前月，需要加1，与实际月份相差1
        this.month = (now.getMonth()+1).toString()
        //        获取当前日期
        this.date = now.getDate().toString()
        //        获取当前小时
        this.hour = now.getHours().toString()
        //        获取当前分钟
        this.minute = now.getMinutes().toString()
        //        获取当前秒
        this.secondss = now.getSeconds().toString()
        //        数字位数小于2时加上0
        if(now.getMonth()+1<10){
            this.month = ("0"+ (now.getMonth()+1)).toString()
        }
        if(now.getDate()<10){
            this.date = "0"+ now.getDate().toString()
        }
        if(now.getHours()<10){
            this.hour = "0"+ now.getHours().toString()
        }
        if(now.getMinutes()<10){
            this.minute = "0"+ now.getMinutes().toString()
        }
        if(now.getSeconds()<10){
            this.secondss = "0"+ now.getSeconds().toString()
        }
        //        制定时间戳
        this.nowtime = this.year.toString() + this.month.toString() + this.date.toString() + this.hour.toString()+ this.minute.toString()+this.secondss.toString()
        //        格式化当前时间
        this.last_update = this.year + "年" + this.month + "月" + this.date + "日" + this.hour + ":" +this.minute + ":" + this.secondss
        //        打印时间戳和格式化时间
        console.info(this.nowtime)
        console.info(this.last_update)
        console.info("年："+this.year+"月："+this.month+"日："+this.date+"时："+this.hour+"分:"+this.minute+"秒:"+this.secondss)
    },

    showhintDialog(e) {
        this.$element('hintDialog').show()
    },

    sethintDialog(e) {
        this.$element('hintDialog').close()
    },

    tabChange(e){
        console.info("Tab index: " + e.index)
    },

    // 开始检测
    start_detection(types) {
        this.get_time();
        var type = types;
        var status = 'ON';
        let that = this;
        that.showhintDialog()  // 弹出准备对话框
        that.audioPlayerDemo()  // 音频播放
        // 等待检测，3S准备时间
        let prepareIntervalID = setInterval(function() {

            that.num--;  // 3S准备时间倒计时
            if(that.num==0){  // 3S倒计时结束
                that.sethintDialog()  // 隐藏准备对话框
                clearInterval(prepareIntervalID)  // 取消由 setInterval() 函数设定的定时执行操作

                prompt.showToast({
                    message: "开始检测",
                    duration: 2000,
                });
                // 命令下发，开始检测
                that.get_cd(type, status)
                return;
            }
        }, 1000)
    },



    // 重置用的tar会被重置成1，倒计时记录会归0
    remake(){
        //        stateFlag=1;
        this.startText="开始检测"
        this.counter = 10;
    },

    // 音频播放
    async audioPlayerDemo() {
        let audioPlayer = media.createAudioPlayer();     //创建一个音频播放实例
        this.setCallBack(audioPlayer);                   //设置事件回调
        //        let fdPath = 'fd://'
        // path路径的码流可通过"hdc file send D:\xxx\01.mp3 /data/app/el1/bundle/public/ohos.acts.multimedia.audio.audioplayer/ohos.acts.multimedia.audio.audioplayer/assets/entry/resources/rawfile" 命令，将其推送到设备上
        //        let path = '/data/app/el1/bundle/public/ohos.acts.multimedia.audio.audioplayer/ohos.acts.multimedia.audio.audioplayer/assets/entry/resources/rawfile/01.mp3';
        //        倒计时音频
        let fdPath = 'http://120.46.171.116/countdown.mp3'
        audioPlayer.src = fdPath; //设置src属性，并触发'dataLoad'事件回调
    },

    // 设置播放器回调函数
    setCallBack(audioPlayer) {
        audioPlayer.on('dataLoad', () => {              //设置'dataLoad'事件回调，src属性设置成功后，触发此回调
            console.info('audio set source success');
            audioPlayer.play();                           //调用play方法开始播放，触发'play'事件回调
        });
        audioPlayer.on('play', () => {                  //设置'play'事件回调
            console.info('audio play success');
        });
        audioPlayer.on('finish', () => {                //设置'finish'事件回调，播放完成触发
            console.info('audio play finish');
            audioPlayer.release();                        //audioPlayer资源被销毁
            audioPlayer = undefined;
        });
        audioPlayer.on('error', (error) => {             //设置'error'事件回调
            console.info(`audio error called, errName is ${error.name}`);
            console.info(`audio error called, errCode is ${error.code}`);
            console.info(`audio error called, errMessage is ${error.message}`);
        });
    },

    // 发送命令下发请求
    get_cd: function(types, status){

        let httpRequest = http.createHttp();
        // 创建一个http，里面包括发起请求、中断请求、订阅/取消订阅HTTP Response Header 事件。
        let url = "http://120.46.171.116:8082/get_command?types="+types+"&status="+status+'&account=15565988801'+'&time='+this.nowtime;
        let that = this;

        httpRequest.request(url, {
            // 注意请求方法：http.POST
            method: http.POST,
        }, (err, data)=> {  // 判断是否请求成功
            if (!err) {  // 请求成功
                console.log("命令下发成功")
                prompt.showToast({
                    message: "命令下发成功",
                    duration: 2000,
                });

                clearInterval(detectIntervalID);
                // 检测过程
                detectIntervalID = setInterval(function(){
                    that.run(types)
                }, 1000);
                that.startText="检测中..."


            } else {  // 请求失败
                prompt.showToast({
                    message: "命令下发失败",
                    duration: 3000,
                });

            }
        })

    },

    // 检测过程倒计时
    run(types){
        this.counter--;
        // tar等于2并且检测倒计时不等于-1：检测过程未结束，使progress圆环组件渲染到指定的百分比
        if (this.counter!=-1) {
            this.percentage = this.counter*20;  // 控制圆环组件百分比
            // 如果到0秒，检测倒计时结束
            if(this.counter==0){
                this.num = 3  // 重新赋值预备3S
                // 按钮变成重新检测
                this.startText = "重新测试"
            }
        } else {  // 检测过程结束
            clearInterval(detectIntervalID);
            detectIntervalID = null;
            this.counter = 5;  // 倒计时初始化为5秒
            this.percentage = 100;  // 圆环组件初始化为100
            let that = this;
            prompt.showToast({
                message: "检测成功",
                duration: 3000,
            })

            that.visible = true  // 开始刷新，显示刷新组件
            this.counter = 5
            // 延迟5000毫秒执行查询
            setTimeout(()=>{
                that.getData(types)  // 获取检测数据
                that.visible = false  // 结束刷新，显示刷新组件
            }, 5000)

        }
    },

    // 获取数据请求
    getData(types){
        if(types=="Kneading") {
            // 创建一个http请求
            let httpRequest = http.createHttp();
            let url = "http://120.46.171.116:8082/get_specified_kneading_data";
            httpRequest.request(url, {
                // 注意请求方法：http.POST
                method: http.POST,
                extraData: {
                    account:"15565988801",
                    time:this.nowtime
                },
            }, (err, data)=> {  // 判断是否请求成功
                if (!err) {  // 请求成功
                    this.return_result = JSON.parse(data.result);  //JSON.parse(字符串)：将字符串转换成json数据格式
                    this.vals11 = this.last_update;  //使用json赋值变量
                    this.vals12 = this.return_result.results[0].data.Kneading;
                    this.vals13 = this.return_result.results[0].data.kneadlevel;
                    console.info("捏合获取数据成功："+data.result)
                } else {  // 请求失败
                    var winfo = JSON.parse(data.result);
                    console.info("获取数据失败："+winfo)
                    prompt.showToast({
                        message: winfo,
                        duration: 3000,
                    });
                }
            })
        } else if(types=="Bend"){
            // 创建一个http请求
            let httpRequest = http.createHttp();
            let url = "http://120.46.171.116:8082/get_specified_bend_data";
            httpRequest.request(url, {
                method: http.POST,
                extraData: {
                    account:"15565988801",
                    time:this.nowtime
                },
            }, (err, data)=> {  // 判断是否请求成功
                if (!err) {  // 请求成功
                    this.return_result = JSON.parse(data.result);  //JSON.parse(字符串)：将字符串转换成json数据格式
                    this.vals21 = this.last_update;  //使用json赋值变量
                    this.vals22 = this.return_result.angle.bend_index_finger;
                    this.vals23 = this.return_result.angle.bend_middle_finger;
                    this.vals24 = this.return_result.angle.bend_ring_finger;
                    this.vals25 = this.return_result.angle.aver_bend_anger;
                    this.vals26 = this.return_result.stretchlevel;
                    console.info("弯曲角度获取数据成功："+data.result)
                } else {  // 请求失败
                    var winfo = JSON.parse(data.result);
                    console.info("获取数据失败："+winfo)
                    prompt.showToast({
                        message: winfo,
                        duration: 3000,
                    });
                }
            })

        } else if(types=="Tremor"){
            // 创建一个http请求
            let httpRequest = http.createHttp();
            let url = "http://120.46.171.116:8082/get_accel_gr_detect";
            httpRequest.request(url, {
                method: http.POST,
                extraData: {
                    account:"15565988801",
                    time:this.nowtime
                },
            }, (err, data)=> {  // 判断是否请求成功
                if (!err) {  // 请求成功
                    this.return_result = JSON.parse(data.result);  //JSON.parse(字符串)：将字符串转换成json数据格式
                    this.vals31 = this.last_update;  //使用json赋值变量
                    this.vals32 = this.return_result.confidence.toFixed(2) ;
                    this.vals33 = this.return_result.label;
                    console.info("获取数据失败："+data.result)
                } else {  // 请求失败
                    var winfo = JSON.parse(data.result);
                    console.info("获取数据失败："+winfo)
                    prompt.showToast({
                        message: winfo,
                        duration: 3000,
                    });
                }
            })

        } else if(types=="Muscle"){
            // 创建一个http请求
            let httpRequest = http.createHttp();
            // 创建一个http，里面包括发起请求、中断请求、订阅/取消订阅HTTP Response Header 事件。
            let url = "http://120.46.171.116:8082/get_specified_muscle_data";
            httpRequest.request(url, {
                // 注意请求方法：http.POST
                method: 'POST',
                extraData: {
                    account:"15565988801",
                    time:this.nowtime
                },
            }, (err, data)=> {  // 判断是否请求成功
                if (!err) {  // 请求成功
                    this.return_result = JSON.parse(data.result);  //JSON.parse(字符串)：将字符串转换成json数据格式
                    this.vals41 = this.nowtime;  //使用json赋值变量
                    this.vals42 = this.return_result.results[0].Muscle.muscle;
                    console.info("获取数据失败："+data.result)
                } else {  // 请求失败
                    var winfo = JSON.parse(data.result);
                    console.info("获取数据失败："+winfo)
                    prompt.showToast({
                        message: winfo,
                        duration: 3000,
                    });
                }
            })
        }
    },


}


